nanopyx.core.transform.image_shift
Combination of functions for shifting an image, using several interpolation methods.
1""" 2Combination of functions for shifting an image, using several interpolation methods. 3""" 4 5from scipy.ndimage import shift 6import numpy as np 7 8from ..utils.timeit import timeit2 9from . import interpolation_bicubic 10from . import interpolation_bilinear 11from . import interpolation_nearest_neighbor 12from . import interpolation_catmull_rom 13from . import interpolation_lanczos 14 15from skimage.transform import AffineTransform, warp 16import cv2 17 18 19@timeit2 20def catmull_rom_shift(image: np.ndarray, dx: float, dy: float): 21 interpolator = interpolation_catmull_rom.Interpolator(image) 22 return interpolator.shift(dx, dy) 23 24 25@timeit2 26def lanczos_shift(image: np.ndarray, dx: float, dy: float): 27 interpolator = interpolation_lanczos.Interpolator(image) 28 return interpolator.shift(dx, dy) 29 30 31@timeit2 32def bicubic_shift(image: np.ndarray, dx: float, dy: float): 33 interpolator = interpolation_bicubic.Interpolator(image) 34 return interpolator.shift(dx, dy) 35 36 37@timeit2 38def bilinear_shift(image: np.ndarray, dx: float, dy: float): 39 interpolator = interpolation_bilinear.Interpolator(image) 40 return interpolator.shift(dx, dy) 41 42 43@timeit2 44def nearest_neighbor_shift(image: np.ndarray, dx: float, dy: float): 45 interpolator = interpolation_nearest_neighbor.Interpolator(image) 46 return interpolator.shift(dx, dy) 47 48 49@timeit2 50def scipy_shift(image: np.ndarray, dx: float, dy: float): 51 return shift(image, (dy, dx)) 52 53 54@timeit2 55def skimage_shift(image: np.ndarray, dx: float, dy: float): 56 tform = AffineTransform(translation=(-dx, -dy)) 57 return warp(image, tform) 58 59 60@timeit2 61def cv2_shift(image: np.ndarray, dx: float, dy: float): 62 return cv2.warpAffine( 63 image, np.float32([[1, 0, dx], [0, 1, dy]]), image.shape[:2][::-1] 64 )